home *** CD-ROM | disk | FTP | other *** search
/ PC Media 22 / PC MEDIA CD22.iso / share / prog / txtmenu1 / siren.cpp < prev    next >
C/C++ Source or Header  |  1993-01-01  |  4KB  |  181 lines

  1. /*
  2.         About       TXTMENU
  3.  
  4. This program is to generate a txt-menu in DOS. It is mainly for users to
  5. develop their own txt-based menu. It reads the .cfg file to get the menu
  6. contents and return diffrerent value to indicate the select result.
  7. It has wonderful sound effect and some time counting facility. Besides,
  8. it includes all SOURCE CODE !
  9.  
  10. To start it just type the exe file and the program will work.
  11.  
  12. With  SOURCE CODE , you can easily modify it for your own purpose.
  13. You can distribute the source code freely only together with this readme
  14. file. Since this is a shareware, you are required to register in order
  15. to use it in your own program. It will only cost you $50. 
  16.  
  17. However, if you do not like to pay so much, you can also pay as much as you 
  18. wish to register. Just think the time and energe you will save by this
  19. program !
  20.  
  21. After you register for this program, you will get permission to 
  22. include the source code to your own program. Besides,you will also
  23. get more detailed comments of the source code and you can get answers
  24. from author about any programming problems without extra fee.
  25.  
  26. Money and Check should mail to:
  27.  
  28. Mr. Yongyong Xu,
  29. 1940 Howard Street. Apt. 333,
  30. Kalamazoo, MI 49008
  31. U.S.A.
  32.  
  33. Telephone: (616) 387-7569
  34. EMail:  yxu@cs.wmich.edu   (prefered)
  35.             or
  36.         99xu1@grog.lab.cc.wmich.edu
  37.  
  38. When you cannot reach me by the above address, try the next:
  39. -----------------------------------------------------------------------
  40. <Permanet Home Address>
  41.  
  42. Mr. Xu Yongyong,
  43. Building 34 Room 604,
  44. HuayuanXinCun , Chang Zhou
  45. Jiang Su Province 213016
  46. P.R.China
  47.  
  48. Tel:(86)-(519)-(328-0177)
  49.  
  50.  
  51. */
  52. //#define DELAY 10000
  53. //#define RATE  10
  54. #include "siren.h"
  55.  
  56. void siren0(unsigned int delays, unsigned int rate );
  57. void siren1(unsigned int delays, unsigned int rate );
  58. void siren2(unsigned int delays );
  59. void siren3(unsigned int delays );
  60. void frequency(int freq, unsigned int delays );
  61.  
  62.  
  63. void siren(int i, unsigned int delays, unsigned int rate  )
  64. {
  65.     switch (i) {
  66.         case 0:
  67.             siren0(delays, rate );
  68.             break;
  69.         case 1:
  70.             siren1(delays, rate );
  71.             break;
  72.         case 2:
  73.             siren2(delays);
  74.             break;
  75.         case 3:
  76.             siren3(delays);
  77.             break;
  78.     }
  79. };
  80.  
  81. void siren0(unsigned int delays, unsigned int rate )
  82. {
  83.   unsigned i,freq;
  84.   union {
  85.     long    divisior;
  86.     unsigned char c[2];
  87.   } count;
  88.   unsigned char p;
  89.  
  90.      p=inportb (97);
  91.      outportb(97,p | 3 );
  92.      for (freq=1000; freq<3000; freq +=rate ) {
  93.         count.divisior = 1193280 / freq;
  94.         outportb ( 67, 182);
  95.         outportb ( 66, count.c[0]);
  96.         outportb ( 66, count.c[1]);
  97. //      for (i=0; i<delays; ++i ) ;
  98.         delay ( delays / 1000);
  99.     }
  100.  
  101.      for (  ; freq> 1000; freq -=rate ) {
  102.         count.divisior = 1193280 / freq;
  103.         outportb ( 67, 182);
  104.         outportb ( 66, count.c[0]);
  105.         outportb ( 66, count.c[1]);
  106. //      for (i=0; i<delays; ++i ) ;
  107.         delay ( delays / 1000);
  108.     }
  109.     outportb (97,p);
  110. }
  111.  
  112.  
  113. void siren1(unsigned int delays, unsigned int rate)
  114. // laser blaster
  115. {
  116.   unsigned i,freq;
  117.   union {
  118.     long    divisior;
  119.     unsigned char c[2];
  120.   } count;
  121.   unsigned char p;
  122.  
  123.      p=inportb (97);
  124.      outportb(97,p | 3 );
  125.      for (freq=3000;freq>1000; freq -=rate ) {
  126.         count.divisior = 1193280 / freq;
  127.         outportb ( 67, 182);
  128.         outportb ( 66, count.c[0]);
  129.         outportb ( 66, count.c[1]);
  130. //      for (i=0; i<delays; ++i ) ;
  131.         delay ( delays / 1000);
  132.     }
  133.     outportb (97,p);
  134. }
  135.  
  136. void siren2(unsigned int delays )
  137. // random sound , continue
  138. {
  139.   int freq;
  140.     do {
  141.         do {
  142.         freq = rand();
  143.         } while (freq >5000);
  144.         frequency ( freq , delays );
  145.     } while ( !kbhit());
  146. }
  147.  
  148. void siren3(unsigned int delays )
  149. //  random sound , not continue
  150. {
  151.   int freq;
  152.         do {
  153.         freq = rand();
  154.         } while (freq >5000);
  155.         frequency ( freq , delays );
  156. }
  157.  
  158.  
  159. void frequency(int freq, unsigned int delays )
  160. {
  161.   unsigned i;
  162.   union {
  163.     long    divisior;
  164.     unsigned char c[2];
  165.   } count;
  166.   unsigned char p;
  167.  
  168.     count.divisior = 1193280  / freq;
  169.     outportb ( 67, 182);
  170.     outportb ( 66, count.c[0]);
  171.     outportb ( 66, count.c[1]);
  172.  
  173.     p=inportb (97);
  174.     outportb (97,p | 3 );
  175.  
  176.  // for (i=0; i<delays; ++i ) ;
  177.     delay ( delays / 200);
  178.  
  179.     outportb (97,p);
  180. }
  181.